package com.xbongbong.pro.statistic.service;

import com.xbongbong.paas.field.FieldAttrEntity;
import com.xbongbong.paas.pojo.dto.ChartUpdateAveDTO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.statistic.pojo.ChartSavePojo;
import com.xbongbong.pro.statistic.pojo.ChartSystemSavePojo;
import com.xbongbong.pro.statistic.pojo.ChartSystemValuePojo;
import com.xbongbong.pro.statistic.pojo.dto.AttrConditionDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartBaseDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartDeleteDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartDrillListDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartEditDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartInitDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartListDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartListDwDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartListEditDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartMirrorInstallDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartMobileFavoriteSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartMobileListDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartOperateEnableDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartPublishDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartSavePositionDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartSaveStyleDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartThroughDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartValueSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.CustomChartDeleteDTO;
import com.xbongbong.pro.statistic.pojo.dto.DataSetSourceAttrDTO;
import com.xbongbong.pro.statistic.pojo.dto.DataSourceAttrDTO;
import com.xbongbong.pro.statistic.pojo.dto.FirstCategoryDTO;
import com.xbongbong.pro.statistic.pojo.dto.FormIdBusinessTypeAttrDTO;
import com.xbongbong.pro.statistic.pojo.dto.LinkageListDTO;
import com.xbongbong.pro.statistic.pojo.dto.LinkageSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.NumFormatGetDTO;
import com.xbongbong.pro.statistic.pojo.dto.NumFormatSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.SearchAttrDTO;
import com.xbongbong.pro.statistic.pojo.dto.ShowTypeDTO;
import com.xbongbong.pro.statistic.pojo.dto.SummaryAttrGetDTO;
import com.xbongbong.pro.statistic.pojo.vo.AttrConditionVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartBaseVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartBatchSaveVo;
import com.xbongbong.pro.statistic.pojo.vo.ChartDataLimitVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartDeleteVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartDrillListVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartEditVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartInfoDwVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartInitVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartMirrorInstallVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartMobileFavoriteSaveVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartMobileListVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartPermissionAndRuleDTO;
import com.xbongbong.pro.statistic.pojo.vo.ChartPermissionAndRuleVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartPublishVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartSaveVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartThroughVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartTypeListVO;
import com.xbongbong.pro.statistic.pojo.vo.CustomChartDeleteVO;
import com.xbongbong.pro.statistic.pojo.vo.DataSourceAttrVO;
import com.xbongbong.pro.statistic.pojo.vo.FirstCategoryVO;
import com.xbongbong.pro.statistic.pojo.vo.LinkageListVO;
import com.xbongbong.pro.statistic.pojo.vo.NumFormatGetVO;
import com.xbongbong.pro.statistic.pojo.vo.NumFormatSaveVO;
import com.xbongbong.pro.statistic.pojo.vo.NumberAttrVO;
import com.xbongbong.pro.statistic.pojo.vo.ShowTypeVO;
import com.xbongbong.pro.statistic.pojo.vo.SummaryAttrVO;

/**
 * 图表/指标相关
 *
 * @author zcp
 * @date 2019/1/11
 * @since v1.0
 * @version v1.0
 */
public interface ChartService {
    /**
     * 获取待选字段
     * @param dataSourceAttrDTO
     * @return
     * @throws XbbException
     */
    DataSourceAttrVO dataSourceAttr(DataSourceAttrDTO dataSourceAttrDTO) throws XbbException;

    /**
     * 数据集获取待选字段
     * @param dataSetSourceAttrDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.DataSourceAttrVO
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    DataSourceAttrVO dataSetSourceAttr(DataSetSourceAttrDTO dataSetSourceAttrDTO) throws XbbException;

    /**
     *判断BI选择表单的数据量是否超限
     * @param dataSourceAttrDTO
     * @return
     * @throws XbbException
     */
    ChartDataLimitVO chartDataLimit(DataSourceAttrDTO dataSourceAttrDTO) throws XbbException;
    /**
     *获取待选字段(仅全局搜索使用)
     * @param searchAttrDTO
     * @return
     * @throws XbbException
     */
    DataSourceAttrVO  searchSourceAttr(SearchAttrDTO searchAttrDTO) throws XbbException;
    /**
     * 获取指标基本信息
     * @param chartBaseDTO
     * @return
     * @throws XbbException
     */
    ChartBaseVO chartBaseList(ChartBaseDTO chartBaseDTO) throws XbbException;

    /**
     * 图表列表
     * @param chartListDTO
     * @return
     * @throws XbbException
     */
    ChartSavePojo chartList(ChartListDTO chartListDTO) throws XbbException;

    /**
     * 通过分类id获取图表，当没有分类id时，必须要输入要筛选的图表名称
     * @param chartListDTO
     * @return com.xbongbong.pro.statistic.pojo.ChartSavePojo
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    ChartSavePojo chartListByCategory(ChartListDTO chartListDTO) throws XbbException;

    /**
     * 图表的保存
     * @param chartSavePojo
     * @return
     * @throws XbbException
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    ChartBatchSaveVo chartSave(ChartSavePojo chartSavePojo) throws XbbException, IllegalAccessException, InstantiationException;

    /**
     * 自定义指标的保存
     * @param chartSavePojo
     * @return
     * @throws XbbException
     */
    ChartSaveVO chartValueSave(ChartValueSaveDTO chartSavePojo) throws XbbException;

    /**
     * 系统指标的保存
     * @param chartSystemValuePojo
     * @return
     * @throws XbbException
     */
    ChartSaveVO chartSystemValueSave(ChartSystemValuePojo chartSystemValuePojo) throws XbbException;

    /**
     * 编辑图表获取上次保存的信息(单个)
     * @param chartEditDTO
     * @return
     * @throws XbbException
     */
    ChartEditVO chartEdit(ChartEditDTO chartEditDTO) throws XbbException;

    /**
     * 编辑图表获取上次保存的信息(列表)
     * @param chartListEditDTO
     * @return
     * @throws XbbException
     */
    ChartSavePojo chartListEdit(ChartListEditDTO chartListEditDTO) throws XbbException;

    /**
     * 根据字段类型获取展示方式
     * @param attrConditionDTO
     * @return
     * @throws XbbException
     */
    AttrConditionVO getAttrCondition(AttrConditionDTO attrConditionDTO) throws XbbException;

    /**
     * （批量）删除指标（不包含图表,图表的在save中）
     * @param chartDeleteDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartDeleteVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/23 11:28
     * @since v1.0
     * @version v1.0
     */
    ChartDeleteVO chartDelete(ChartDeleteDTO chartDeleteDTO) throws XbbException;

    /**
     * 获取展示方式
     * @param showTypeDTO
     * @return
     * @throws XbbException
     */
    ShowTypeVO getShowType(ShowTypeDTO showTypeDTO) throws XbbException;


    /**
     * 新增、移除收藏
     * @param chartMobileFavoriteSaveDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartMobileFavoriteSaveVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/28 17:16
     * @since v1.0
     * @version v1.0
     */
    ChartMobileFavoriteSaveVO chartMobileFavoriteSave(ChartMobileFavoriteSaveDTO chartMobileFavoriteSaveDTO) throws XbbException;

    /**
     * 移动端图表列表
     * @param chartMobileListDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartMobileListVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/29 15:51
     * @since v1.0
     * @version v1.0
     */
    ChartMobileListVO chartMobileList(ChartMobileListDTO chartMobileListDTO) throws XbbException;

    /**
     * 图表初始化
     *
     * @param chartInitDTO 入参（包含corpid）
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartInitVO
     * @throws XbbException 父类异常
     * @author 徐俊杰
     * @date 2019/1/31 15:05
     * @since v1.0
     */
    ChartInitVO chartInit(ChartInitDTO chartInitDTO) throws XbbException;

    /**
     * 系统图表的编辑(只修改权限)
     * @param chartSystemSavePojo 入参
     * @return ChartBatchSaveVo
     * @author zhouwq
     * @date 2019/4/30 16:12
     * @throws XbbException error
     */
    ChartBatchSaveVo chartPermissionsUpdate(ChartSystemSavePojo chartSystemSavePojo) throws XbbException;


    ChartBatchSaveVo salesFunnelPermissionsUpdate(ChartSystemSavePojo chartSystemSavePojo) throws XbbException;

    /**
     * 权限设置获取上次保存的信息
     * @param chartEditDTO 入参
     * @return ChartEditVO
     * @author zhouwq
     * @date 2019/5/1 14:39
     * @throws XbbException error
     */
    ChartEditVO chartPermissionsGet(ChartEditDTO chartEditDTO) throws XbbException;

    /**
     * 销售漏斗图表，操作设置获取上次保存的信息 （操作权限 + 统计规则）
     * @param chartPermissionAndRuleDTO
     * @return
     * @throws XbbException
     */
    ChartPermissionAndRuleVO chartPermissionAndRuleGet(ChartPermissionAndRuleDTO chartPermissionAndRuleDTO) throws XbbException;

    /**
     * 发布到首页
     *
     * @param chartPublishDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartPublishVO
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2019/4/29 16:10
     * @since v1.0
     */
    ChartPublishVO chartPublish(ChartPublishDTO chartPublishDTO) throws XbbException;
    /**
     * 二级分类获取一级分类
     *
     * @param firstCategoryDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.FirstCategoryVO
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2019/5/16 15:47
     * @since v1.0
     */
    FirstCategoryVO firstCategory(FirstCategoryDTO firstCategoryDTO) throws XbbException;

    ChartMirrorInstallVO mirrorInstall(ChartMirrorInstallDTO chartMirrorInstallDTO) throws XbbException;

    /**
     * 仪表盘位置信息保存以及删除图表
     * @param chartSavePositionDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartSaveVO
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/24 13:38
     */
    ChartSaveVO chartUpdateDashboard(ChartSavePositionDTO chartSavePositionDTO) throws XbbException;

    /**
     * 仪表盘样式保存
     * @param chartSaveStyleDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartSaveVO
     * @throws XbbException error
     * @author weiming
     * @date 2021/3/15 13:38
     */
    ChartSaveVO chartUpdateStyle(ChartSaveStyleDTO chartSaveStyleDTO) throws XbbException;

    ChartSaveVO chartUpdateSort(ChartSavePositionDTO chartSavePositionDTO) throws XbbException;

    /**
     * 删除自定义图表
     * @param chartDeleteDTO
     * @return
     * @throws XbbException
     */
    CustomChartDeleteVO deleteCustomChart(CustomChartDeleteDTO chartDeleteDTO) throws XbbException;

    /**
     * 查询表单下的数字字段
     * @param formIdBusinessTypeAttrDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.NumberAttrVO
     * @throws XbbException error
     * @author weiming
     * @date 2020/10/12 20:01
     */
    NumberAttrVO searchNumberAttr(FormIdBusinessTypeAttrDTO formIdBusinessTypeAttrDTO) throws XbbException;

    /**
     * 查询图表下的汇总字段
     * @param summaryAttrGetDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.SummaryAttrVO
     * @throws XbbException error
     * @author weiming
     * @date 2020/10/12 20:01
     */
    SummaryAttrVO searchSummaryAttr(SummaryAttrGetDTO summaryAttrGetDTO) throws XbbException;

    /**
     * 图表列表
     * @param chartList4DwDTO
     * @return
     * @throws XbbException
     */
    ChartInfoDwVO chartList4Dw(ChartListDwDTO chartList4DwDTO) throws XbbException;

    /**
     * 校验穿透
     * @param throughDTO
     * @return
     * @throws XbbException
     */
    ChartThroughVO checkThrough(ChartThroughDTO throughDTO) throws XbbException;

    /**
     * 新建图表类型
     * @param baseDTO
     * @return
     * @throws XbbException
     */
    ChartTypeListVO chartTypeList(BaseDTO baseDTO) throws XbbException;

    /**
     * 更新自定义表中的数据，加上默认平均线1
     */
    BaseVO chartUpdate4Ave(ChartUpdateAveDTO chartUpdateAveDTO) throws XbbException;

    /**
     * 数值格式保存
     * @param numFormatSaveDTO
     * @return
     * @throws XbbException
     */
    NumFormatSaveVO saveNumFormat(NumFormatSaveDTO numFormatSaveDTO) throws XbbException;

    /**
     * 数值格式获取
     * @param numFormatGetDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.NumFormatGetVO
     * @throws XbbException
     * @author xinpeng.jiang
     * @date 2022/3/2 15:22
     * @version 1.0
     */
    NumFormatGetVO getNumFormat(NumFormatGetDTO numFormatGetDTO) throws XbbException;
    
    /**
     * 图表钻取设置-层级列表
     *
     * @param chartDrillListDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartDrillListVO
     * @throws XbbException
     * @author zcp
     * @version v1.0
     * @since v1.0
     */
    ChartDrillListVO drillList(ChartDrillListDTO chartDrillListDTO) throws XbbException;

    /**
     * 图表交互开关：穿透、钻取等开启关闭控制
     * @param chartOperateEnableDTO
     * @return com.xbongbong.paas.toolbox.wrap.BaseVO
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    BaseVO operateEnable(ChartOperateEnableDTO chartOperateEnableDTO) throws XbbException;

    /**
     * 联动设置可选/不可选列表
     *
     * @param linkageListDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.LinkageListVO
     * @author zyy
     * @date 2022/11/30
     * @version v1.0
     */
    LinkageListVO linkageList(LinkageListDTO linkageListDTO) throws XbbException;

    /**
     * 联动设置保存/编辑
     *
     * @param linkageSaveDTO
     * @return com.xbongbong.paas.toolbox.wrap.BaseVO
     * @author zyy
     * @date 2022/12/7
     * @version v1.0
     */
    BaseVO linkageSave(LinkageSaveDTO linkageSaveDTO) throws XbbException;
}
